1647. Обнулить биты

 

Дано целые числа n и k. Обнулите в числе n его последние k бит и выведите результат. Рекомендуется сделать эту задачу без использования циклов.

 

Вход. Два числа n (0 n 231 – 1) и k (0 k 30).

 

Выход. Выведите число, полученное в результате обнуления k последних бит.

 

Пример входа

5 1

 

Пример выхода

4

 

 

РЕШЕНИЕ

элементарная задача – битовые операции

 

Анализ алгоритма

Построим маску mask, в которой на последних k позициях будут стоять нули, а на остальных  единицы. Искомый ответ равен битовой операции “and” входного значения n и маски mask.

 

Требуемую маску можно также получить, сдвинув число -1 (в битовом представлении все единицы) на k позиций влево. после чего k правых бит в нем примут значение 0.

 

Еще одно решение: можно сдвинуть число n на k бит вправо, а затем на k бит влево. То есть ответом будет значение (n >> k) << k.

 

Реализация алгоритма

Читаем входные данные.

 

scanf("%d %d",&n,&k);

 

Вычисляем и выводим ответ.

 

n = n & (~((1 << k) - 1));

printf("%d\n",n);

 

Реализация второй вариант

 

#include <stdio.h>

 

int n, k;

 

int main(void)

{

  scanf("%d %d",&n,&k);

  n = n & (-1 << k);

  printf("%d\n",n);

  return 0;

}

 

Реализация третий вариант

 

#include <stdio.h>

 

int n, k, t;

 

int main(void)

{

  scanf("%d %d",&n,&k);

  n = (n >> k) << k;

  printf("%d\n",n);

  return 0;

}